package com.ruoyi.business.service;

import com.ruoyi.business.domain.OrderManage;
import com.ruoyi.business.domain.dto.OrderManageDTO;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;

import java.util.List;
import java.util.Map;

/**
 * 工单管理Service接口
 *
 * @author D_xiao
 * @date 2022-08-14
 */
public interface IOrderManageService {
    /**
     * 查询工单管理
     *
     * @param id 工单管理主键
     * @return 工单管理
     */
    public OrderManage selectOrderManageById(Long id);

    /**
     * 查询工单管理列表
     *
     * @param orderManage 工单管理
     * @return 工单管理集合
     */
    public List<OrderManage> selectOrderManageList(OrderManage orderManage);

    /**
     * 查询工单管理列表(按用户权限过滤)
     *
     * @param orderManage 工单管理
     * @return 工单管理集合
     */
    public List<OrderManageDTO> selectOrderManageListByUserAuth(OrderManage orderManage);

    /**
     * 查询工单管理列表(按运维权限过滤)
     *
     * @param orderManage 工单管理
     * @return 工单管理集合
     */
    public List<OrderManageDTO> selectOrderManageListByOptAuth(OrderManage orderManage);

    /**
     * 查询工单管理列表(按管理员权限过滤)
     *
     * @param orderManage 工单管理
     * @return 工单管理
     */
    public List<OrderManageDTO> selectOrderManageListByAdminAuth(OrderManage orderManage);

    /**
     * 新增工单管理
     *
     * @param orderManage 工单管理
     * @return 结果
     */
    public int insertOrderManage(OrderManage orderManage);

    /**
     * 修改工单管理
     *
     * @param orderManage 工单管理
     * @return 结果
     */
    public int updateOrderManage(OrderManage orderManage);

    /**
     * 批量删除工单管理
     *
     * @param ids 需要删除的工单管理主键集合
     * @return 结果
     */
    public int deleteOrderManageByIds(Long[] ids);

    /**
     * 删除工单管理信息
     *
     * @param id 工单管理主键
     * @return 结果
     */
    public int deleteOrderManageById(Long id);

    /**
     * 修改工单状态
     *
     * @param orderManage 工单管理
     * @return 结果
     */
    public int updateOrderStatus(OrderManage orderManage);

    /**
     * @param
     * @return
     * @description 获取今日工单数量
     * @author Jensen
     * @since 2022/8/21 17:49
     */
    public AjaxResult todayOrderNum();

    /**
     * @param num 日期天数
     * @return
     * @description 按照日期统计
     * @author Jensen
     * @since 2022/8/21 19:39
     */
    AjaxResult orderUser(int num);

    /**
     * @param num 日期天数
     * @return
     * @description 按照日期统计
     * @author Jensen
     * @since 2022/8/21 19:39
     */
    AjaxResult orderRank(int num);

    /**
     * 查询工单详情 app
     *
     * @param id 工单管理主键
     * @return 工单管理
     */
    OrderManage getOrderInfo(Long id);

    /**
     * 功能描述:    接单
     *
     * @Author wanghc
     * @Date 2022/08/22 16:48
     * @param orderManage 工单
     * @return int
     */
    int receiveOrder(OrderManage orderManage);

    /**
     * 功能描述:    取消工单
     *
     * @Author wanghc
     * @Date 2022/08/22 16:48
     * @param orderManage 工单
     * @return int
     */
    int cancelOrder(OrderManage orderManage);

    /**
     * 撤销工单
     * @param orderManage
     * @return
     */
    int revokeOrder(OrderManage orderManage);

    /**
     * 功能描述:    确认完成工单
     *
     * @Author wanghc
     * @Date 2022/08/22 16:48
     * @param orderManage 工单
     * @return int
     */
    int finishOrder(OrderManage orderManage);

    /**
     * 功能描述:    评价工单
     *
     * @Author wanghc
     * @Date 2022/08/23 03:30
     * @param orderManage
     * @return int
     */
    int evaluateOrder(OrderManage orderManage);

    /**
     * 功能描述:   小程序查询各种类型工单数量
     *
     * @Author wanghc
     * @Date 2022/08/25 16:52
     * @param
     * @return java.util.Map<java.lang.String,java.lang.Integer>
     */
    Map<String, Integer> getOrderNum();
}
